home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / colorhelp.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  34KB  |  1,143 lines

  1. /***************************************************************************
  2.  *
  3.  *    Copyright (c) 1990-1993        The Santa Cruz Operation, Inc.
  4.  *
  5.  *    All rights reserved.  No part of this program or publication may be
  6.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  7.  *    or translated into any language or computer language, in any form or
  8.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  9.  *    biological, or otherwise, without the prior written permission of:
  10.  *
  11.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  12.  *        400 Encinal St., Santa Cruz, California 95060 USA
  13.  *
  14.  **************************************************************************/
  15.  
  16. /*
  17.  *    SCCS Stuff
  18.  *        
  19.  *     @(#) colorhelp.c 9.1 93/05/25 SCOINC    
  20.  *
  21.  * S001, 15-Sep-93, rickra
  22.  *     Added disk space help.
  23.  *    Made modifications so that help window is on a per window basis,
  24.  *    rather than having the toplevel being the MAIN window....
  25.  *
  26.  *
  27.  * S000, 25-may-93, rickra
  28.  *     Added copyright and modification history
  29. */
  30.  
  31.  
  32. #include <X11/Xlib.h>
  33. #include <X11/Intrinsic.h>
  34. #include <Xm/Xm.h>
  35. #include <Xm/DrawingA.h>
  36. #include <Xm/DialogS.h>
  37.  
  38. #include "include/unixincs.h"
  39. #include "include/buttons.h"
  40. #include "include/xsw.h"
  41.  
  42.  
  43. extern struct NetworkXswStruct *head_server;
  44. extern int      server_count;
  45.  
  46. Widget          temp_drawing_area;
  47. Widget          temporary_widget;
  48. Display        *temp_display;
  49. Window          temp_window;
  50. int             temp_screen;
  51. GC              temp_gc;
  52. int             doing_help = 0;
  53.  
  54.  
  55. int             current_colorHelp_button_num;
  56.  
  57. void
  58. set_color_dialog_string (position, display_string, color, button_number)
  59.  
  60.      int             position;
  61.      char           *display_string;
  62.      unsigned long   color;
  63.      int             button_number;
  64.  
  65. {
  66.  
  67.   int             x, y, w, h;
  68.  
  69. #define BOXTHICKNESS 3
  70.  
  71.  
  72. #ifdef DEBUG_COLOR_HELP
  73.   fprintf (stdout, "in set_color_dialog_string...\n");
  74. #endif
  75.  
  76.   temp_window = XtWindow (temp_drawing_area);
  77.  
  78.   XSetForeground (temp_display, temp_gc, foreground);
  79.   XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  80.               LineSolid, CapButt, JoinMiter);
  81.   XDrawRectangle (temp_display, temp_window, temp_gc,
  82.           x = 10,
  83.           y = position - FHEIGHT,
  84.           w = FWIDTH * 2,
  85.           h = FHEIGHT);
  86.  
  87.   XSetForeground (temp_display, temp_gc, color);
  88.   XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  89.  
  90.  
  91.  
  92.   XSetForeground (temp_display, temp_gc, foreground);
  93.   XDrawString (temp_display, temp_window, temp_gc, 70, position,
  94.            display_string, strlen (display_string));
  95.  
  96.  
  97. #ifdef DEBUG_COLOR_HELP
  98.   fprintf (stdout, "leaving  set_color_dialog_string...\n");
  99. #endif
  100. }
  101.  
  102. static void
  103. popup_callback (my_widget, client_data, cbs)
  104.      Widget          my_widget;
  105.      struct expose_callback_struct *client_data;
  106.      XmAnyCallbackStruct *cbs;
  107.  
  108. {
  109.  
  110.   char           *cptr;
  111.   char            s80[80];
  112.   int             len;
  113.   int             line_len;
  114.   int             space = FWIDTH * 4;
  115.   int             file_box_start;
  116.   int             inodes_box_start;
  117.   int             proc_box_start;
  118.   int             region_box_start;
  119.   int             cblocks_box_start;
  120.   int             x, y, w, h;
  121.  
  122.   int             button_number;
  123.  
  124.  
  125.   struct NetworkXswStruct *server_pointer;
  126.  
  127.  
  128.   button_number = client_data -> button_number;
  129.  
  130.   server_pointer = client_data -> server_pointer;
  131.  
  132.  
  133.   temporary_widget = server_pointer ->
  134.     SEPERATE_WINDOWS_LIST[button_number].colorHelp.toplevel;
  135.   temp_drawing_area = server_pointer ->
  136.     SEPERATE_WINDOWS_LIST[button_number].colorHelp.drawing_area;
  137.   temp_display = server_pointer ->
  138.     SEPERATE_WINDOWS_LIST[button_number].colorHelp.display;
  139.   temp_window = server_pointer ->
  140.     SEPERATE_WINDOWS_LIST[button_number].colorHelp.window;
  141.   temp_screen = server_pointer ->
  142.     SEPERATE_WINDOWS_LIST[button_number].colorHelp.screen;
  143.   temp_gc = server_pointer ->
  144.     SEPERATE_WINDOWS_LIST[button_number].colorHelp.gc;
  145.  
  146.   temp_window = XtWindow (temp_drawing_area);
  147.   XClearWindow (temp_display, temp_window);
  148.  
  149.  
  150.  
  151.   switch (button_number)
  152.     {
  153.  
  154.  
  155.     case BUTTON_cpu:
  156.       sprintf (s80, "%s", "User scale color");
  157.       cptr = s80;
  158.       set_color_dialog_string (FHEIGHT * 3, cptr, colorUser.pixel);
  159.  
  160.       sprintf (s80, "%s", "Kernel scale color");
  161.       cptr = s80;
  162.       set_color_dialog_string (FHEIGHT * 6, cptr, colorKernel.pixel);
  163.  
  164.       sprintf (s80, "%s", "Break scale color");
  165.       cptr = s80;
  166.       set_color_dialog_string (FHEIGHT * 9, cptr, colorBreak.pixel);
  167.  
  168.       sprintf (s80, "%s", "Numeric alarm color");
  169.       cptr = s80;
  170.       set_color_dialog_string (FHEIGHT * 12, cptr, colorNumericAlarm.pixel);
  171.  
  172.       sprintf (s80, "%s", "Numeric warning color");
  173.       cptr = s80;
  174.       set_color_dialog_string (FHEIGHT * 15, cptr, colorNumericWarning.pixel);
  175.  
  176.       sprintf (s80, "%s", "Numeric color");
  177.       cptr = s80;
  178.       set_color_dialog_string (FHEIGHT * 18, cptr, colorNumeric.pixel);
  179.  
  180.       break;
  181.     case BUTTON_wait:
  182.  
  183.       sprintf (s80, "%s", "I/O scale color");
  184.       cptr = s80;
  185.       set_color_dialog_string (FHEIGHT * 3, cptr, colorIo.pixel);
  186.  
  187.       sprintf (s80, "%s", "Page I/O scale color");
  188.       cptr = s80;
  189.       set_color_dialog_string (FHEIGHT * 6, cptr, colorPio.pixel);
  190.  
  191.       sprintf (s80, "%s", "Swap scale color");
  192.       cptr = s80;
  193.       set_color_dialog_string (FHEIGHT * 9, cptr, colorSwap.pixel);
  194.  
  195.       sprintf (s80, "%s", "Numeric alarm color");
  196.       cptr = s80;
  197.       set_color_dialog_string (FHEIGHT * 12, cptr, colorNumericAlarm.pixel);
  198.  
  199.       sprintf (s80, "%s", "Numeric warning color");
  200.       cptr = s80;
  201.       set_color_dialog_string (FHEIGHT * 15, cptr, colorNumericWarning.pixel);
  202.  
  203.       sprintf (s80, "%s", "Numeric color");
  204.       cptr = s80;
  205.       set_color_dialog_string (FHEIGHT * 18, cptr, colorNumeric.pixel);
  206.  
  207.       break;
  208.     case BUTTON_cache:
  209.  
  210.       sprintf (s80, "%s", "Cache scale write HIT");
  211.       cptr = s80;
  212.       set_color_dialog_string (FHEIGHT * 3, cptr, colorCacheWriteHit.pixel);
  213.  
  214.       sprintf (s80, "%s", "Cache scale read HIT");
  215.       cptr = s80;
  216.       set_color_dialog_string (FHEIGHT * 6, cptr, colorCacheReadHit.pixel);
  217.  
  218.       sprintf (s80, "%s", "Cache scale write MISS");
  219.       cptr = s80;
  220.       set_color_dialog_string (FHEIGHT * 9, cptr, colorCacheWriteMiss.pixel);
  221.  
  222.       sprintf (s80, "%s", "Cache scale read MISS");
  223.       cptr = s80;
  224.       set_color_dialog_string (FHEIGHT * 12, cptr, colorCacheReadMiss.pixel);
  225.  
  226.       sprintf (s80, "%s", "Cache scale write MISS WARNING");
  227.       cptr = s80;
  228.       set_color_dialog_string (FHEIGHT * 15, cptr,
  229.                    colorCacheWriteMissWarning.pixel);
  230.  
  231.       sprintf (s80, "%s", "Cache scale write MISS WARNING");
  232.       cptr = s80;
  233.       set_color_dialog_string (FHEIGHT * 18, cptr,
  234.                    colorCacheReadMissWarning.pixel);
  235.  
  236.       sprintf (s80, "%s", "Cache scale write MISS ALARM");
  237.       cptr = s80;
  238.       set_color_dialog_string (FHEIGHT * 21, cptr,
  239.                    colorCacheWriteMissAlarm.pixel);
  240.  
  241.       sprintf (s80, "%s", "Cache scale read MISS ALARM");
  242.       cptr = s80;
  243.       set_color_dialog_string (FHEIGHT * 24, cptr,
  244.                    colorCacheReadMissAlarm.pixel);
  245.  
  246.       break;
  247.  
  248.     case BUTTON_other:
  249.  
  250. /*
  251.  * Draw title strings.....
  252.  */
  253.       sprintf (s80, "%s", "File");
  254.       cptr = s80;
  255.  
  256.       line_len = 0;
  257.  
  258.       XSetForeground (temp_display, temp_gc, foreground);
  259.       XDrawString (temp_display, temp_window, temp_gc, 100, FHEIGHT * 3,
  260.            cptr, strlen (cptr));
  261.  
  262.       file_box_start = 100;
  263.  
  264.       line_len += (FWIDTH * strlen (cptr)) + space;
  265.  
  266.       sprintf (s80, "%s", "Inodes");
  267.       cptr = s80;
  268.  
  269.       XSetForeground (temp_display, temp_gc, foreground);
  270.       XDrawString (temp_display, temp_window, temp_gc,
  271.            100 + line_len, FHEIGHT * 3,
  272.            cptr, strlen (cptr));
  273.  
  274.       inodes_box_start = 100 + line_len;
  275.  
  276.       line_len += (FWIDTH * strlen (cptr)) + space;
  277.  
  278.       sprintf (s80, "%s", "Proc");
  279.       cptr = s80;
  280.  
  281.       XSetForeground (temp_display, temp_gc, foreground);
  282.       XDrawString (temp_display, temp_window, temp_gc,
  283.            100 + line_len, FHEIGHT * 3,
  284.            cptr, strlen (cptr));
  285.  
  286.       proc_box_start = 100 + line_len;
  287.       line_len += (FWIDTH * strlen (cptr)) + space;
  288.  
  289.       sprintf (s80, "%s", "Region");
  290.       cptr = s80;
  291.  
  292.       XSetForeground (temp_display, temp_gc, foreground);
  293.       XDrawString (temp_display, temp_window, temp_gc,
  294.            100 + line_len, FHEIGHT * 3,
  295.            cptr, strlen (cptr));
  296.  
  297.       region_box_start = 100 + line_len;
  298.       line_len += (FWIDTH * strlen (cptr)) + space;
  299.  
  300.       sprintf (s80, "%s", "Cblocks");
  301.       cptr = s80;
  302.  
  303.       XSetForeground (temp_display, temp_gc, foreground);
  304.       XDrawString (temp_display, temp_window, temp_gc,
  305.            100 + line_len, FHEIGHT * 3,
  306.            cptr, strlen (cptr));
  307.  
  308.       cblocks_box_start = 100 + line_len;
  309.  
  310. /*
  311.  * Draw OK, Warning, and Alarm Strings
  312.  */
  313.       sprintf (s80, "%s", "O.K.");
  314.       cptr = s80;
  315.  
  316.       XSetForeground (temp_display, temp_gc, foreground);
  317.       XDrawString (temp_display, temp_window, temp_gc,
  318.            10, FHEIGHT * 6,
  319.            cptr, strlen (cptr));
  320.  
  321.       sprintf (s80, "%s", "Warning");
  322.       cptr = s80;
  323.  
  324.       XSetForeground (temp_display, temp_gc, foreground);
  325.       XDrawString (temp_display, temp_window, temp_gc,
  326.            10, FHEIGHT * 9,
  327.            cptr, strlen (cptr));
  328.  
  329.       sprintf (s80, "%s", "Alarm");
  330.       cptr = s80;
  331.  
  332.       XSetForeground (temp_display, temp_gc, foreground);
  333.       XDrawString (temp_display, temp_window, temp_gc,
  334.            10, FHEIGHT * 12,
  335.            cptr, strlen (cptr));
  336.  
  337.  
  338. /*
  339.  * Draw colored  O.k. boxes .....
  340.  */
  341.  
  342.       XSetForeground (temp_display, temp_gc, foreground);
  343.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  344.               LineSolid, CapButt, JoinMiter);
  345.       XDrawRectangle (temp_display, temp_window, temp_gc,
  346.               x = file_box_start,
  347.               y = (FHEIGHT * 6) - FHEIGHT,
  348.               w = FWIDTH * 2,
  349.               h = FHEIGHT);
  350.  
  351.       XSetForeground (temp_display, temp_gc, colorNfile.pixel);
  352.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  353.  
  354.       XSetForeground (temp_display, temp_gc, foreground);
  355.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  356.               LineSolid, CapButt, JoinMiter);
  357.       XDrawRectangle (temp_display, temp_window, temp_gc,
  358.               x = inodes_box_start,
  359.               y = (FHEIGHT * 6) - FHEIGHT,
  360.               w = FWIDTH * 2,
  361.               h = FHEIGHT);
  362.  
  363.       XSetForeground (temp_display, temp_gc, colorNinode.pixel);
  364.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  365.  
  366.       XSetForeground (temp_display, temp_gc, foreground);
  367.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  368.               LineSolid, CapButt, JoinMiter);
  369.       XDrawRectangle (temp_display, temp_window, temp_gc,
  370.               x = proc_box_start,
  371.               y = (FHEIGHT * 6) - FHEIGHT,
  372.               w = FWIDTH * 2,
  373.               h = FHEIGHT);
  374.  
  375.       XSetForeground (temp_display, temp_gc, colorNproc.pixel);
  376.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  377.  
  378.       XSetForeground (temp_display, temp_gc, foreground);
  379.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  380.               LineSolid, CapButt, JoinMiter);
  381.       XDrawRectangle (temp_display, temp_window, temp_gc,
  382.               x = region_box_start,
  383.               y = (FHEIGHT * 6) - FHEIGHT,
  384.               w = FWIDTH * 2,
  385.               h = FHEIGHT);
  386.  
  387.       XSetForeground (temp_display, temp_gc, colorNregion.pixel);
  388.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  389.  
  390.       XSetForeground (temp_display, temp_gc, foreground);
  391.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  392.               LineSolid, CapButt, JoinMiter);
  393.       XDrawRectangle (temp_display, temp_window, temp_gc,
  394.               x = cblocks_box_start,
  395.               y = (FHEIGHT * 6) - FHEIGHT,
  396.               w = FWIDTH * 2,
  397.               h = FHEIGHT);
  398.  
  399.       XSetForeground (temp_display, temp_gc, colorNcblocks.pixel);
  400.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  401.  
  402.  
  403. /*
  404.  * Draw colored  Warning  boxes .....
  405.  */
  406.  
  407.  
  408.       XSetForeground (temp_display, temp_gc, foreground);
  409.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  410.               LineSolid, CapButt, JoinMiter);
  411.       XDrawRectangle (temp_display, temp_window, temp_gc,
  412.               x = file_box_start,
  413.               y = (FHEIGHT * 9) - FHEIGHT,
  414.               w = FWIDTH * 2,
  415.               h = FHEIGHT);
  416.  
  417.       XSetForeground (temp_display, temp_gc, colorNfileWarning.pixel);
  418.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  419.  
  420.       XSetForeground (temp_display, temp_gc, foreground);
  421.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  422.               LineSolid, CapButt, JoinMiter);
  423.       XDrawRectangle (temp_display, temp_window, temp_gc,
  424.               x = inodes_box_start,
  425.               y = (FHEIGHT * 9) - FHEIGHT,
  426.               w = FWIDTH * 2,
  427.               h = FHEIGHT);
  428.  
  429.       XSetForeground (temp_display, temp_gc, colorNinodeWarning.pixel);
  430.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  431.  
  432.       XSetForeground (temp_display, temp_gc, foreground);
  433.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  434.               LineSolid, CapButt, JoinMiter);
  435.       XDrawRectangle (temp_display, temp_window, temp_gc,
  436.               x = proc_box_start,
  437.               y = (FHEIGHT * 9) - FHEIGHT,
  438.               w = FWIDTH * 2,
  439.               h = FHEIGHT);
  440.  
  441.       XSetForeground (temp_display, temp_gc, colorNprocWarning.pixel);
  442.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  443.  
  444.       XSetForeground (temp_display, temp_gc, foreground);
  445.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  446.               LineSolid, CapButt, JoinMiter);
  447.       XDrawRectangle (temp_display, temp_window, temp_gc,
  448.               x = region_box_start,
  449.               y = (FHEIGHT * 9) - FHEIGHT,
  450.               w = FWIDTH * 2,
  451.               h = FHEIGHT);
  452.  
  453.       XSetForeground (temp_display, temp_gc, colorNregionWarning.pixel);
  454.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  455.  
  456.       XSetForeground (temp_display, temp_gc, foreground);
  457.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  458.               LineSolid, CapButt, JoinMiter);
  459.       XDrawRectangle (temp_display, temp_window, temp_gc,
  460.               x = cblocks_box_start,
  461.               y = (FHEIGHT * 9) - FHEIGHT,
  462.               w = FWIDTH * 2,
  463.               h = FHEIGHT);
  464.  
  465.       XSetForeground (temp_display, temp_gc, colorNcblocksWarning.pixel);
  466.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  467.  
  468.  
  469.  
  470. /*
  471.  * Draw colored  Alarm boxes .....
  472.  */
  473.  
  474.  
  475.       XSetForeground (temp_display, temp_gc, foreground);
  476.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  477.               LineSolid, CapButt, JoinMiter);
  478.       XDrawRectangle (temp_display, temp_window, temp_gc,
  479.               x = file_box_start,
  480.               y = (FHEIGHT * 12) - FHEIGHT,
  481.               w = FWIDTH * 2,
  482.               h = FHEIGHT);
  483.  
  484.       XSetForeground (temp_display, temp_gc, colorNfileAlarm.pixel);
  485.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  486.  
  487.       XSetForeground (temp_display, temp_gc, foreground);
  488.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  489.               LineSolid, CapButt, JoinMiter);
  490.       XDrawRectangle (temp_display, temp_window, temp_gc,
  491.               x = inodes_box_start,
  492.               y = (FHEIGHT * 12) - FHEIGHT,
  493.               w = FWIDTH * 2,
  494.               h = FHEIGHT);
  495.  
  496.       XSetForeground (temp_display, temp_gc, colorNinodeAlarm.pixel);
  497.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  498.  
  499.       XSetForeground (temp_display, temp_gc, foreground);
  500.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  501.               LineSolid, CapButt, JoinMiter);
  502.       XDrawRectangle (temp_display, temp_window, temp_gc,
  503.               x = proc_box_start,
  504.               y = (FHEIGHT * 12) - FHEIGHT,
  505.               w = FWIDTH * 2,
  506.               h = FHEIGHT);
  507.  
  508.       XSetForeground (temp_display, temp_gc, colorNprocAlarm.pixel);
  509.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  510.  
  511.       XSetForeground (temp_display, temp_gc, foreground);
  512.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  513.               LineSolid, CapButt, JoinMiter);
  514.       XDrawRectangle (temp_display, temp_window, temp_gc,
  515.               x = region_box_start,
  516.               y = (FHEIGHT * 12) - FHEIGHT,
  517.               w = FWIDTH * 2,
  518.               h = FHEIGHT);
  519.  
  520.       XSetForeground (temp_display, temp_gc, colorNregionAlarm.pixel);
  521.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  522.  
  523.       XSetForeground (temp_display, temp_gc, foreground);
  524.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  525.               LineSolid, CapButt, JoinMiter);
  526.       XDrawRectangle (temp_display, temp_window, temp_gc,
  527.               x = cblocks_box_start,
  528.               y = (FHEIGHT * 12) - FHEIGHT,
  529.               w = FWIDTH * 2,
  530.               h = FHEIGHT);
  531.  
  532.       XSetForeground (temp_display, temp_gc, colorNcblocksAlarm.pixel);
  533.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  534.  
  535.       break;
  536.     case BUTTON_mem:
  537.  
  538.  
  539. /*
  540.  * Draw title strings.....
  541.  */
  542.       sprintf (s80, "%s", "Memory Used");
  543.       cptr = s80;
  544.  
  545.       line_len = 0;
  546.  
  547.       XSetForeground (temp_display, temp_gc, foreground);
  548.       XDrawString (temp_display, temp_window, temp_gc, 100, FHEIGHT * 3,
  549.            cptr, strlen (cptr));
  550.  
  551.       file_box_start = 100;
  552.  
  553.       line_len += (FWIDTH * strlen (cptr)) + space;
  554.  
  555.       sprintf (s80, "%s", "Swap Used");
  556.       cptr = s80;
  557.  
  558.       XSetForeground (temp_display, temp_gc, foreground);
  559.       XDrawString (temp_display, temp_window, temp_gc,
  560.            100 + line_len, FHEIGHT * 3,
  561.            cptr, strlen (cptr));
  562.  
  563.       inodes_box_start = 100 + line_len;
  564.  
  565.       line_len += (FWIDTH * strlen (cptr)) + space;
  566.  
  567.       sprintf (s80, "%s", "Avail. Swap Used");
  568.       cptr = s80;
  569.  
  570.       XSetForeground (temp_display, temp_gc, foreground);
  571.       XDrawString (temp_display, temp_window, temp_gc,
  572.            100 + line_len, FHEIGHT * 3,
  573.            cptr, strlen (cptr));
  574.  
  575.  
  576.       proc_box_start = 100 + line_len;
  577.       line_len += (FWIDTH * strlen (cptr)) + space;
  578.  
  579.  
  580. /*
  581.  * Draw OK, Warning, and Alarm Strings
  582.  */
  583.       sprintf (s80, "%s", "O.K.");
  584.       cptr = s80;
  585.  
  586.       XSetForeground (temp_display, temp_gc, foreground);
  587.       XDrawString (temp_display, temp_window, temp_gc,
  588.            10, FHEIGHT * 6,
  589.            cptr, strlen (cptr));
  590.  
  591.       sprintf (s80, "%s", "Warning");
  592.       cptr = s80;
  593.  
  594.       XSetForeground (temp_display, temp_gc, foreground);
  595.       XDrawString (temp_display, temp_window, temp_gc,
  596.            10, FHEIGHT * 9,
  597.            cptr, strlen (cptr));
  598.  
  599.       sprintf (s80, "%s", "Alarm");
  600.       cptr = s80;
  601.  
  602.       XSetForeground (temp_display, temp_gc, foreground);
  603.       XDrawString (temp_display, temp_window, temp_gc,
  604.            10, FHEIGHT * 12,
  605.            cptr, strlen (cptr));
  606.  
  607.  
  608. /*
  609.  * Draw colored  O.k. boxes .....
  610.  */
  611.  
  612.       XSetForeground (temp_display, temp_gc, foreground);
  613.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  614.               LineSolid, CapButt, JoinMiter);
  615.       XDrawRectangle (temp_display, temp_window, temp_gc,
  616.               x = file_box_start,
  617.               y = (FHEIGHT * 6) - FHEIGHT,
  618.               w = FWIDTH * 2,
  619.               h = FHEIGHT);
  620.  
  621.       XSetForeground (temp_display, temp_gc, colorMemUsed.pixel);
  622.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  623.  
  624.       XSetForeground (temp_display, temp_gc, foreground);
  625.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  626.               LineSolid, CapButt, JoinMiter);
  627.       XDrawRectangle (temp_display, temp_window, temp_gc,
  628.               x = inodes_box_start,
  629.               y = (FHEIGHT * 6) - FHEIGHT,
  630.               w = FWIDTH * 2,
  631.               h = FHEIGHT);
  632.  
  633.       XSetForeground (temp_display, temp_gc, colorSwapUsed.pixel);
  634.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  635.  
  636.       XSetForeground (temp_display, temp_gc, foreground);
  637.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  638.               LineSolid, CapButt, JoinMiter);
  639.       XDrawRectangle (temp_display, temp_window, temp_gc,
  640.               x = proc_box_start,
  641.               y = (FHEIGHT * 6) - FHEIGHT,
  642.               w = FWIDTH * 2,
  643.               h = FHEIGHT);
  644.  
  645.       XSetForeground (temp_display, temp_gc, colorAvailSwapUsed.pixel);
  646.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  647.  
  648.  
  649. /*
  650.  * Draw colored  Warning  boxes .....
  651.  */
  652.  
  653.  
  654.       XSetForeground (temp_display, temp_gc, foreground);
  655.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  656.               LineSolid, CapButt, JoinMiter);
  657.       XDrawRectangle (temp_display, temp_window, temp_gc,
  658.               x = file_box_start,
  659.               y = (FHEIGHT * 9) - FHEIGHT,
  660.               w = FWIDTH * 2,
  661.               h = FHEIGHT);
  662.  
  663.       XSetForeground (temp_display, temp_gc, colorMemUsedWarning.pixel);
  664.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  665.  
  666.       XSetForeground (temp_display, temp_gc, foreground);
  667.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  668.               LineSolid, CapButt, JoinMiter);
  669.       XDrawRectangle (temp_display, temp_window, temp_gc,
  670.               x = inodes_box_start,
  671.               y = (FHEIGHT * 9) - FHEIGHT,
  672.               w = FWIDTH * 2,
  673.               h = FHEIGHT);
  674.  
  675.       XSetForeground (temp_display, temp_gc, colorSwapUsedWarning.pixel);
  676.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  677.  
  678.       XSetForeground (temp_display, temp_gc, foreground);
  679.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  680.               LineSolid, CapButt, JoinMiter);
  681.       XDrawRectangle (temp_display, temp_window, temp_gc,
  682.               x = proc_box_start,
  683.               y = (FHEIGHT * 9) - FHEIGHT,
  684.               w = FWIDTH * 2,
  685.               h = FHEIGHT);
  686.  
  687.       XSetForeground (temp_display, temp_gc, colorAvailSwapUsedWarning.pixel);
  688.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  689.  
  690.  
  691. /*
  692.  * Draw colored  Alarm boxes .....
  693.  */
  694.  
  695.  
  696.       XSetForeground (temp_display, temp_gc, foreground);
  697.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  698.               LineSolid, CapButt, JoinMiter);
  699.       XDrawRectangle (temp_display, temp_window, temp_gc,
  700.               x = file_box_start,
  701.               y = (FHEIGHT * 12) - FHEIGHT,
  702.               w = FWIDTH * 2,
  703.               h = FHEIGHT);
  704.  
  705.       XSetForeground (temp_display, temp_gc, colorMemUsedAlarm.pixel);
  706.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  707.  
  708.       XSetForeground (temp_display, temp_gc, foreground);
  709.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  710.               LineSolid, CapButt, JoinMiter);
  711.       XDrawRectangle (temp_display, temp_window, temp_gc,
  712.               x = inodes_box_start,
  713.               y = (FHEIGHT * 12) - FHEIGHT,
  714.               w = FWIDTH * 2,
  715.               h = FHEIGHT);
  716.  
  717.       XSetForeground (temp_display, temp_gc, colorSwapUsedAlarm.pixel);
  718.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  719.  
  720.       XSetForeground (temp_display, temp_gc, foreground);
  721.       XSetLineAttributes (temp_display, temp_gc, BOXTHICKNESS,
  722.               LineSolid, CapButt, JoinMiter);
  723.       XDrawRectangle (temp_display, temp_window, temp_gc,
  724.               x = proc_box_start,
  725.               y = (FHEIGHT * 12) - FHEIGHT,
  726.               w = FWIDTH * 2,
  727.               h = FHEIGHT);
  728.  
  729.       XSetForeground (temp_display, temp_gc, colorAvailSwapUsedAlarm.pixel);
  730.       XFillRectangle (temp_display, temp_window, temp_gc, x, y, w, h);
  731.  
  732.       break;
  733.     case BUTTON_ps_cpu:
  734.  
  735.       sprintf (s80, "%s", "Process is IDLE");
  736.       cptr = s80;
  737.       set_color_dialog_string (FHEIGHT * 3, cptr, colorPScpuIdle.pixel);
  738.  
  739.       sprintf (s80, "%s", "Process has RUN");
  740.       cptr = s80;
  741.       set_color_dialog_string (FHEIGHT * 6, cptr, colorPScpuActive.pixel);
  742.  
  743.       sprintf (s80, "%s", "Process currently RUNNING");
  744.       cptr = s80;
  745.       set_color_dialog_string (FHEIGHT * 9, cptr, colorPScpuRunning.pixel);
  746.  
  747.       sprintf (s80, "%s", "Process is NEW");
  748.       cptr = s80;
  749.       set_color_dialog_string (FHEIGHT * 12, cptr, colorPScpuNew.pixel);
  750.  
  751.       break;
  752.     case BUTTON_ps_io:
  753.       sprintf (s80, "%s", "Process is IDLE");
  754.       cptr = s80;
  755.       set_color_dialog_string (FHEIGHT * 3, cptr, colorPSioIdle.pixel);
  756.  
  757.       sprintf (s80, "%s", "Process has I/0");
  758.       cptr = s80;
  759.       set_color_dialog_string (FHEIGHT * 6, cptr, colorPSioActive.pixel);
  760.  
  761.       sprintf (s80, "%s", "Process is NEW");
  762.       cptr = s80;
  763.       set_color_dialog_string (FHEIGHT * 9, cptr, colorPSioNew.pixel);
  764.  
  765.       break;
  766.     case BUTTON_ps_mem:
  767.       sprintf (s80, "%s", "Process is not GROWING/SHRINKING");
  768.       cptr = s80;
  769.       set_color_dialog_string (FHEIGHT * 3, cptr, colorPSmem.pixel);
  770.  
  771.       sprintf (s80, "%s", "Process is GROWING");
  772.       cptr = s80;
  773.       set_color_dialog_string (FHEIGHT * 6, cptr, colorPSmemGrowing.pixel);
  774.  
  775.       sprintf (s80, "%s", "Process is SHRINKING");
  776.       cptr = s80;
  777.       set_color_dialog_string (FHEIGHT * 9, cptr, colorPSmemShrinking.pixel);
  778.  
  779.       sprintf (s80, "%s", "Process is NEW");
  780.       cptr = s80;
  781.       set_color_dialog_string (FHEIGHT * 12, cptr, colorPSmemNew.pixel);
  782.       break;
  783.     case BUTTON_streams:
  784.       sprintf (s80, "%s", "Static numeric");
  785.       cptr = s80;
  786.       set_color_dialog_string (FHEIGHT * 3, cptr, colorStaticNumeric.pixel);
  787.  
  788.       sprintf (s80, "%s", "Numeric");
  789.       cptr = s80;
  790.       set_color_dialog_string (FHEIGHT * 6, cptr, colorNumeric.pixel);
  791.  
  792.       sprintf (s80, "%s", "Numeric Warning");
  793.       cptr = s80;
  794.       set_color_dialog_string (FHEIGHT * 9, cptr, colorNumericWarning.pixel);
  795.  
  796.       sprintf (s80, "%s", "Numeric Alarm");
  797.       cptr = s80;
  798.       set_color_dialog_string (FHEIGHT * 12, cptr, colorNumericAlarm.pixel);
  799.       break;
  800.     case BUTTON_nfsstat:
  801.       sprintf (s80, "%s", "Numeric");
  802.       cptr = s80;
  803.       set_color_dialog_string (FHEIGHT * 3, cptr, colorNumeric.pixel);
  804.  
  805.       sprintf (s80, "%s", "Numeric Alarm");
  806.       cptr = s80;
  807.       set_color_dialog_string (FHEIGHT * 6, cptr, colorNumericAlarm.pixel);
  808.  
  809.       break;
  810.     case BUTTON_sysinfo:
  811.       sprintf (s80, "%s", "Numeric");
  812.       cptr = s80;
  813.       set_color_dialog_string (FHEIGHT * 3, cptr, colorNumeric.pixel);
  814.       break;
  815.     case BUTTON_tune_var:
  816.       sprintf (s80, "%s", "Static numeric");
  817.       cptr = s80;
  818.       set_color_dialog_string (FHEIGHT * 3, cptr, colorLabel.pixel);
  819.  
  820.       break;
  821.     case BUTTON_dev_stats:
  822.       sprintf (s80, "%s", "Numeric");
  823.       cptr = s80;
  824.       set_color_dialog_string (FHEIGHT * 3, cptr, colorNumeric.pixel);
  825.  
  826.       break;
  827.     case BUTTON_disk_space:
  828.       sprintf (s80, "%s", "Gaining disk space");
  829.       cptr = s80;
  830.       set_color_dialog_string (FHEIGHT * 3, cptr, colorDiskspaceGaining.pixel);
  831.  
  832.       sprintf (s80, "%s", "Losing disk space");
  833.       cptr = s80;
  834.       set_color_dialog_string (FHEIGHT * 6, cptr, colorDiskspaceLosing.pixel);
  835.  
  836.       sprintf (s80, "%s", "Stable disk space");
  837.       cptr = s80;
  838.       set_color_dialog_string (FHEIGHT * 9, cptr, colorDiskspaceStable.pixel);
  839.  
  840.       sprintf (s80, "%s", "Static numeric/text");
  841.       cptr = s80;
  842.       set_color_dialog_string (FHEIGHT * 12, cptr, colorStaticNumeric.pixel);
  843.       break;
  844.  
  845.     }
  846.  
  847.  
  848.  
  849. }
  850.  
  851.  
  852. void
  853. create_color_help (local_window)
  854.      Window          local_window;
  855. {
  856.  
  857.   int             i;
  858.   int             j;
  859.   Arg             args[32];
  860.   int             argcount;
  861.  
  862.   int             button_num;
  863.  
  864.   int             popup_width, popup_height;
  865.   int             buffer = 20;
  866.  
  867.   Window          root_window, child_return;
  868.   int             root_x_return, root_y_return;
  869.   int             win_x_return, win_y_return;
  870.   unsigned int    mask_return;
  871.   Boolean         results;
  872.   int             found_button = 0;
  873.  
  874.   XFontStruct    *Current_Font;
  875.   XmFontList      Font_List;
  876.  
  877.   static int      help_popup_created = 0;
  878.  
  879.   struct expose_callback_struct *expose_data;
  880.  
  881.   struct NetworkXswStruct *server_pointer = NULL;
  882.  
  883.  
  884.   results = XQueryPointer (display,
  885.                window,
  886.                &root_window, &child_return,
  887.                &root_x_return, &root_y_return,
  888.                &win_x_return, &win_y_return, &mask_return);
  889.  
  890.  
  891.  
  892.  
  893.  
  894. /*
  895.  * Determine the "window" which is associated with the pointer position
  896.  */
  897.  
  898.  
  899.   server_pointer = head_server;
  900.  
  901.   for (i = 0; i < server_count; i++)
  902.     {
  903.  
  904.       for (j = 0; j < server_pointer -> current_items; j++)
  905.  
  906.     {
  907.  
  908.       if (server_pointer -> SEPERATE_WINDOWS_LIST[server_pointer -> DISPLAY_LIST[j].button_num].window == local_window)
  909.         {
  910.           button_num = server_pointer -> DISPLAY_LIST[j].button_num;
  911.           found_button = 1;
  912.           break;
  913.  
  914.         }
  915.  
  916.     }
  917.  
  918.       if (found_button)
  919.     break;
  920.  
  921.       server_pointer = server_pointer -> forward_link;
  922.  
  923.     }
  924.  
  925.  
  926.  
  927.   if (!found_button)
  928.     {
  929.       return;
  930.     }
  931.  
  932.  
  933.  
  934.  
  935.   doing_help = 1;
  936.  
  937. /*
  938.  *   Position popup near the pointer
  939.  */
  940.  
  941.   argcount = 0;
  942.   switch (button_num)
  943.     {
  944.     case BUTTON_cpu:
  945.  
  946.       popup_width = FWIDTH * 42;
  947.       popup_height = FHEIGHT * 20;
  948.       break;
  949.  
  950.     case BUTTON_wait:
  951.       popup_width = FWIDTH * 42;
  952.       popup_height = FHEIGHT * 20;
  953.       break;
  954.     case BUTTON_cache:
  955.       popup_width = FWIDTH * 46;
  956.       popup_height = FHEIGHT * 28;
  957.       break;
  958.     case BUTTON_other:
  959.       popup_width = FWIDTH * 65;
  960.       popup_height = FHEIGHT * 16;
  961.       argcount++;
  962.       break;
  963.     case BUTTON_mem:
  964.       popup_width = FWIDTH * 65;
  965.       popup_height = FHEIGHT * 16;
  966.       break;
  967.     case BUTTON_ps_cpu:
  968.       popup_width = FWIDTH * 42;
  969.       popup_height = FHEIGHT * 16;
  970.       break;
  971.     case BUTTON_ps_io:
  972.       popup_width = FWIDTH * 42;
  973.       popup_height = FHEIGHT * 12;
  974.       break;
  975.     case BUTTON_ps_mem:
  976.       popup_width = FWIDTH * 48;
  977.       popup_height = FHEIGHT * 16;
  978.       break;
  979.     case BUTTON_streams:
  980.       popup_width = FWIDTH * 48;
  981.       popup_height = FHEIGHT * 16;
  982.       break;
  983.     case BUTTON_nfsstat:
  984.       popup_width = FWIDTH * 48;
  985.       popup_height = FHEIGHT * 12;
  986.       break;
  987.     case BUTTON_sysinfo:
  988.       popup_width = FWIDTH * 48;
  989.       popup_height = FHEIGHT * 6;
  990.       break;
  991.     case BUTTON_tune_var:
  992.       popup_width = FWIDTH * 48;
  993.       popup_height = FHEIGHT * 8;
  994.       break;
  995.     case BUTTON_dev_stats:
  996.       popup_width = FWIDTH * 46;
  997.       popup_height = FHEIGHT * 6;
  998.       break;
  999.     case BUTTON_disk_space:
  1000.       popup_width = FWIDTH * 48;
  1001.       popup_height = FHEIGHT * 16;
  1002.       break;
  1003.  
  1004.     }
  1005.  
  1006.  
  1007.   if (root_x_return + popup_width + buffer >
  1008.       WidthOfScreen (XtScreen (toplevel)))
  1009.     root_x_return = WidthOfScreen (XtScreen (toplevel)) - popup_width - buffer;
  1010.  
  1011.   if ((root_y_return + popup_height + buffer) >
  1012.       HeightOfScreen (XtScreen (toplevel)))
  1013.     root_y_return = HeightOfScreen (XtScreen (toplevel)) -
  1014.       popup_height - buffer;
  1015.  
  1016.  
  1017.   if (!server_pointer ->
  1018.       SEPERATE_WINDOWS_LIST[button_num].help_color_already_created)
  1019.     {
  1020.  
  1021.       argcount = 0;
  1022.       XtSetArg (args[argcount], XmNdeleteResponse, XmUNMAP);
  1023.       argcount++;
  1024.       XtSetArg (args[argcount], XmNallowShellResize, True);
  1025.       argcount++;
  1026.       XtSetArg (args[argcount], XmNx, root_x_return);
  1027.       argcount++;
  1028.       XtSetArg (args[argcount], XmNy, root_y_return);
  1029.       argcount++;
  1030.       XtSetArg (args[argcount], XmNsaveUnder, True);
  1031.       argcount++;
  1032.  
  1033.  
  1034.       server_pointer -> SEPERATE_WINDOWS_LIST[button_num].colorHelp.toplevel =
  1035.     XtCreatePopupShell
  1036.     ("Color Map",
  1037.      xmDialogShellWidgetClass,
  1038.      server_pointer -> SEPERATE_WINDOWS_LIST[button_num].shell_widget,
  1039.      args, argcount);
  1040.  
  1041.  
  1042.       server_pointer -> SEPERATE_WINDOWS_LIST[button_num].colorHelp.display =
  1043.     XtDisplay (server_pointer ->
  1044.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.toplevel);
  1045.  
  1046.       server_pointer -> SEPERATE_WINDOWS_LIST[button_num].colorHelp.screen =
  1047.     DefaultScreen (server_pointer ->
  1048.                SEPERATE_WINDOWS_LIST[button_num].colorHelp.display);
  1049.  
  1050.       server_pointer -> SEPERATE_WINDOWS_LIST[button_num].colorHelp.gc =
  1051.     DefaultGC (server_pointer ->
  1052.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.display,
  1053.            server_pointer ->
  1054.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.screen);
  1055.  
  1056.       argcount = 0;
  1057.       XtSetArg (args[argcount], XmNwidth, popup_width);
  1058.       argcount++;
  1059.       XtSetArg (args[argcount], XmNheight, popup_height);
  1060.       argcount++;
  1061.       XtSetArg (args[argcount], XmNforeground, foreground);
  1062.       argcount++;
  1063.       XtSetArg (args[argcount], XmNbackground, background);
  1064.       argcount++;
  1065.  
  1066.       server_pointer -> 
  1067.         SEPERATE_WINDOWS_LIST[button_num].colorHelp.drawing_area =
  1068.     XmCreateDrawingArea (server_pointer ->
  1069.                SEPERATE_WINDOWS_LIST[button_num].colorHelp.toplevel,
  1070.                  "xsw-draw", args, argcount);
  1071.  
  1072.       XtManageChild (server_pointer ->
  1073.           SEPERATE_WINDOWS_LIST[button_num].colorHelp.drawing_area);
  1074.  
  1075.       expose_data = (struct expose_callback_struct *)
  1076.     calloc (1, sizeof (struct expose_callback_struct));
  1077.  
  1078.       expose_data -> server_pointer = server_pointer;
  1079.       expose_data -> button_number = button_num;
  1080.  
  1081.  
  1082.       XtAddCallback (server_pointer ->
  1083.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.drawing_area,
  1084.              XmNexposeCallback, popup_callback, expose_data);
  1085.  
  1086.       argcount = 0;
  1087.       XtSetArg (args[argcount], XmNx, root_x_return);
  1088.       argcount++;
  1089.       XtSetArg (args[argcount], XmNy, root_y_return);
  1090.       argcount++;
  1091.       XtSetValues (server_pointer ->
  1092.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.toplevel,
  1093.            args, argcount);
  1094.  
  1095.       argcount = 0;
  1096.       XtSetArg (args[argcount], XmNwidth, popup_width);
  1097.       argcount++;
  1098.       XtSetArg (args[argcount], XmNheight, popup_height);
  1099.       argcount++;
  1100.       XtSetValues (server_pointer ->
  1101.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.drawing_area,
  1102.            args, argcount);
  1103.  
  1104.  
  1105.       server_pointer ->
  1106.     SEPERATE_WINDOWS_LIST[button_num].help_color_already_created = 1;
  1107.  
  1108. /*
  1109.  * The following global variable is needed for popdown. It is assumed that
  1110.  * only ONE color help popup window is up at ONE time..
  1111.  */
  1112.  
  1113.     }
  1114.   else
  1115.     {
  1116.       argcount = 0;
  1117.       XtSetArg (args[argcount], XmNx, root_x_return);
  1118.       argcount++;
  1119.       XtSetArg (args[argcount], XmNy, root_y_return);
  1120.       argcount++;
  1121.       XtSetValues (server_pointer ->
  1122.            SEPERATE_WINDOWS_LIST[button_num].colorHelp.toplevel,
  1123.            args, argcount);
  1124.  
  1125.  
  1126.     }
  1127.  
  1128.   current_colorHelp_button_num = button_num;
  1129.  
  1130.   XSetFont (server_pointer ->
  1131.         SEPERATE_WINDOWS_LIST[button_num].colorHelp.display,
  1132.         server_pointer -> SEPERATE_WINDOWS_LIST[button_num].colorHelp.gc,
  1133.         server_pointer -> My_font);
  1134.  
  1135.  
  1136.  
  1137.   XtPopup (server_pointer ->
  1138.        SEPERATE_WINDOWS_LIST[button_num].colorHelp.toplevel,
  1139.        XtGrabNone);
  1140.  
  1141.  
  1142. }
  1143.